home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 August / August CD.bin / Shareware / Education / numericalmethods Folder / chap_3 / jacobi.m < prev    next >
Encoding:
Text File  |  1994-06-05  |  712 b   |  27 lines  |  [MATF/MATL]

  1. function [P,dP,Z] = jacobi(A,B,P,delta,max1)
  2. % [X,dX] = jacobi(A,B,P,delta,max1)
  3. % [X,dX,Z] = jacobi(A,B,P,delta,max1)
  4. % A is an nxn diagonally dominant matrix, input.
  5. % B is a  nx1 vector, input.
  6. % P is an nX1 starting vector, input.
  7. % The tolerance is delta, input.
  8. % The maximum number of iterations is max1, input.
  9. % X is an nx1 vector, output.
  10. % dX is an nx1 vector, output.
  11. % Z is a list of iterations, output.
  12. Z = P';
  13. n = length(B);
  14. Pnew = P;
  15. for k=1:max1,
  16.   for r = 1:n,
  17.     Sum1 = B(r) - A(r,[1:r-1,r+1:n])*P([1:r-1,r+1:n]);
  18.     Pnew(r) = Sum1/A(r,r);
  19.   end
  20.   dP = abs(Pnew-P);
  21.   err = norm(dP);
  22.   relerr = err/(norm(Pnew)+eps);
  23.   P = Pnew;
  24.   Z = [Z;P'];
  25.   if (err<delta)|(relerr<delta), break, end
  26. end
  27.